/**
  ******************************************************************************
* @file				pre_log.h
* @Software			MDK V5
* @Target 			MM32SPIN0230
* @author			ou_teki
* @date				2024-0420
  ******************************************************************************
  */

#ifndef		__PRE_LOG_H__
#define		__PRE_LOG_H__

#include <stdint.h>
#include <string.h>
#include <stdio.h>

#include "uart_com.h"

/*
参考 Android Logcat ，级别最高为 0(Assert) ，最低为 5(Verbose) 
0.[A]：断言(Assert)
1.[E]：错误(Error)
2.[W]：警告(Warn)
3.[I]：信息(Info)
4.[D]：调试(Debug)
5.[V]：详细(Verbose)
*/

/*
C语言中的__FILE__、__LINE__和__FUNCTION__
1、__FILE__ 用于指示本行代码所在源文件的文件名；
2、__LINE__用于指示本行代码所在源文件中的位置（行数）；
3、__FUNCTION__用于指示本行代码所在函数（函数名）；

注：
1）"__FILE__ "、"__LINE__"、"__FUNCTION__"等均大小写敏感
2）支持需要添加头文件 #include<stdio.h>
*/

#define LOG_PRINTF_COMPACT 0 // TK24-1103- 0:不压缩日志输出，1:压缩日志输出

#define LogPrintf(format, ...)                 UartComPrintf(format, ##__VA_ARGS__) //printf(format, ##__VA_ARGS__)
#if (LOG_PRINTF_COMPACT == 1)
#define LogPrintf_assert(format,...)           LogPrintf("[A0]:" format)
#define LogPrintf_error(format,...)            LogPrintf("[E1]:" format)
#define LogPrintf_warn(format,...)             LogPrintf("[W2]:" format)
#define LogPrintf_warn(format,...)             LogPrintf("[W2]:" format,)
#define LogPrintf_info(format,...)             LogPrintf("[I3]:" format,)
#define LogPrintf_debug(format,...)            LogPrintf("[D4]:" format,)
#define LogPrintf_verbose(format,...)          LogPrintf("[V5]:" format,)
#else
#define LogPrintf_assert(format,...)           LogPrintf("[A0][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LogPrintf_error(format,...)            LogPrintf("[E1][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LogPrintf_warn(format,...)             LogPrintf("[W2][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LogPrintf_warn(format,...)             LogPrintf("[W2][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LogPrintf_info(format,...)             LogPrintf("[I3][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LogPrintf_debug(format,...)            LogPrintf("[D4][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#define LogPrintf_verbose(format,...)          LogPrintf("[V5][@%s][%s][#%d]:" format, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#endif


#endif
